草庐IT

C++ 风格约定 : Parameter Names within Class Declaration

全部标签

c++ - cdecl 调用约定如何破坏 ESP?

我的应用程序崩溃了,因为我调用的库函数更改了ESP,尽管它被声明为cdecl。库(libclang.dll)是使用MinGW编译的,我在VC++项目中使用它。这些函数作为C函数导出,DependencyWalker告诉我它们具有正确的cdecl调用约定。通过包含Clang的“index.h”文件,使用dllimport将函数导入到我的项目中。似乎并不是所有函数都破坏了ESP,因此一些函数执行成功,其他函数导致崩溃。这是一个工作函数的集合://calltoclang_getNumDiagnostics(TU);-works!5AF3EFABmovesi,esp5AF3EFADmoveax

c++ - 以 C 风格编写 C++ 代码

如果我们想用C编写一个模块,并且必须使用g++将其编译为C++,是否可以在没有任何自己的类的情况下用C++开发一段代码,仅使用“global/静态函数”就像在C中一样?所以,简单地说,用C++编写C代码(只更改很少的系统头文件等) 最佳答案 是的。事实上,这通常是个好主意,因为C++强制执行比C更强大的类型检查。 关于c++-以C风格编写C++代码,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/qu

c++ - 基本的 C 风格字符串内存分配

我正在使用现有代码开发一个项目,该代码主要使用C++,但使用C风格的字符串。采取以下措施:#includeintmain(intargc,char*argv[]){char*myString="thisisatest";myString="thisisaveryveryveryveryveryveryveryveryveryveryverylongstring";cout这编译并运行良好,输出是长字符串。但是我不明白为什么它有效。我的理解是char*myString是一个指针,指向一个足够大的内存区域来保存字符串文字“thisisatest”。如果是这样,那么我如何才能在同一位置存储更

c++ - 为什么我们在从 main() 返回时遵循相反的约定?

我已经经历了this和this,但我在这里要问的问题是,为什么0被认为是Success?我们总是将0与false联系起来,不是吗? 最佳答案 因为失败的案例比成功的案例多。通常,我们成功的原因只有一个(因为我们成功了:)),但失败的原因有很多。所以0表示成功,其他一切都表示失败,并且该值可以用来报告原因。对于代码中的函数,这是不同的,因为您是指定接口(interface)的人,因此如果足够的话,可以只使用bool。对于main,有一个固定的返回接口(interface),可能有程序只报告成功/失败,但其他程序需要更精细的错误报告。为

c# - 在 C 风格的 block 注释中包含 */

有什么方法可以在C风格的block注释中包含*/吗?在这种情况下,将block注释更改为一系列行注释(//)不是一种选择。下面是导致问题的评论类型示例:/***perl-pe's/(? 最佳答案 通常评论不需要是字面意思,所以这种情况不会经常出现。您可以将其全部包装在#ifblock中:#if0whateveryouwantcangohere,commentsornot#endif 关于c#-在C风格的block注释中包含*/,我们在StackOverflow上找到一个类似的问题:

c++ - 尾随返回类型语法风格是否应该成为新 C++11 程序的默认设置?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭5年前。ImprovethisquestionC++11支持新的函数语法:autofunc_name(intx,inty)->int;目前这个函数将被声明为:intfunc_name(intx,inty);新风格似乎还没有被广泛采用(比如在gccSTL中)但是,这种新风格应该在新的C++11程序中随处可见,还是只在需要时才使用?就我个人而言,如果可能的话,我更喜欢旧的风格,但是混合风格的代码库看起来很难看。

c++ - C 风格字符串到 std::string 的转换说明

我有几个问题,我认为对于有C++经验的人来说很容易回答,我会用粗体显示TL;DR的问题给定以下代码:voidstringTest(conststd::string&s){std::cout希望有人能在这里指出我思维过程中的错误:为什么在传递C风格字符串时,stringTest中的参数必须标记为const?是否没有使用其cstyle字符串构造函数隐式转换为std::string,因此“s”不再是对文字的引用(并且不需要是常量)。此外,cstyle字符串构造函数会是什么样子,编译器如何知道在看到时调用它:stringTest("HelloWorld");它是否简单地将字符串文字识别为类似c

C++:用于取消引用的 [x] 语义:C 风格与指针数组

我知道c风格的数组存储为连续的内存块。这就是以下代码的原因:intmain(intargc,char*argv[]){intarr[3][3];*(*arr+5)=5;std::cout打印5。我假设对于c样式数组*(*arr+5)=5;大致等于编译器为arr[1][2生成的代码]=5;不是吗?(Q1)如果是这样,那么arr[1][2]的语义(即在一个内存块上移动)与在多维指针数组上执行相同操作完全不同,后者的每一层嵌套都会导致指针被解除引用。那正确吗?(Q2)我自己有什么需要注意的地方吗?IE。编译器不知道自己在处理什么样的数组?(Q3)(Qx标记我的问题)在此先感谢您和问候

c++ - 具有 Vista 风格的 CMFCButton

我似乎无法让CMFCButton在对话框应用程序中以Vista样式显示。我正在使用带有MFC功能包的VS2008。以下是重现我的问题的一些步骤:创建一个新的MFC项目;指定一个基于对话框的项目。在主对话框中添加两个按钮。为每个按钮添加一个变量。将其中一个变量设为CButton,将另一个变量设为CMFCButton。编译运行。testapppicturehttp://img7.imageshack.us/img7/3/testapp.png如您所见,CButton具有正确的样式,但CMFCButton没有。我在这里缺少什么? 最佳答案

c++ - 如何在不调用默认构造函数的情况下创建 C 风格的数组?

我正在编写一个内存管理模板类,我想在其中创建一个固定大小的C风格数组,用作堆。我将对象存储在这样的数组中:Tv[SIZE];因为这仅充当可以容纳T个对象的堆的角色,所以我不希望为数组中的每个对象自动调用T默认构造函数。我想到了这样定义堆的解决方案:charv[SIZE*sizeof(T)];...但这会给我对齐问题。有没有更好的方法来实现这一点?添加:因为我有特殊的运行时要求,所以这个类不在全局堆上进行任何分配是很重要的。添加2:SIZE是一个模板参数,在编译时已知。 最佳答案 标准容器使用分配器将分配/解除分配与构造/销毁分开。标